In [1]:
import numpy as np
import os,sys
from PIL import Image
import re
import matplotlib.image as mpimg
from time import time
from sklearn.ensemble import GradientBoostingRegressor
import mask_to_submission
In [2]:
path_to_data = ""
In [3]:
# Loaded a set of images
root_dir = path_to_data + "training/"
image_dir = root_dir + "images/"
files = os.listdir(image_dir)[1:]
n = len(files)
print("Loading " + str(n) + " images")
imgs = np.array([mpimg.imread(image_dir + files[i]) for i in range(n)])
gt_dir = root_dir + "groundtruth/"
print("Loading " + str(n) + " images")
gt_imgs = np.array([mpimg.imread(gt_dir + files[i]) for i in range(n)])
In [4]:
x_train = np.array(imgs)
y_train = np.array(gt_imgs)
st = time()
model = GradientBoostingRegressor(n_estimators=500)
model.fit(x_train.reshape(-1,3),y_train.reshape(-1))
print time() - st
In [5]:
root_dir = path_to_data + "test_set_images/"
n = 51
print("Loading " + str(n) + " images")
imgs = np.array([mpimg.imread(root_dir + "test_"+str(i)+"/" + "test_"+str(i)+".png") for i in range(1,n)])
In [6]:
pred_test = model.predict(imgs.reshape(-1, 3))
pred_test = pred_test.reshape(imgs.shape[:-1])
In [7]:
from skimage.segmentation import random_walker
from sklearn.metrics import f1_score
def pred_random_walker(reg, thr_non_road, thr_road, beta):
'''
Process random walker algorithm for every images.
reg: np.ndarray(number of image, number of row, number of column)
thr_road: minimum value for being consider as a road
thr_non_road: minimum value for being consider as a non-road
beta: random walker's penalization
'''
segmentation = np.zeros_like(reg)
for i in range(len(reg)):
data = reg[i]
markers=np.zeros_like(data)
markers[data<thr_non_road] = 1
markers[data>thr_road] = 2
segmentation[i] = random_walker(data, markers, beta=beta, mode='bf')
segmentation = segmentation -1
return segmentation
In [14]:
image_shape = imgs.shape[:-1]
segmentations = pred_random_walker(pred_test.reshape(image_shape), 0.05, 0.5, beta=500)
In [15]:
# creation of the test masks folder if not exist
try:
os.stat(path_to_data + 'test_set_masks')
except:
os.mkdir(path_to_data + 'test_set_masks')
In [16]:
import scipy.misc
def write_segmentation( segmentations):
for i in range(1, len(segmentations)+1):
filename = path_to_data + 'test_set_masks/satImage_' + '%.3d' % i + '.png'
scipy.misc.imsave(filename, segmentations[i-1])
In [17]:
write_segmentation( segmentations)
In [18]:
submission_filename = 'baseline_submission.csv'
image_filenames = []
for i in range(1, 51):
image_filename = path_to_data + 'test_set_masks/satImage_' + '%.3d' % i + '.png'
image_filenames.append(image_filename)
mask_to_submission.masks_to_submission(submission_filename, *image_filenames)